package com.zkh.myutils.bean;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import com.zkh.myutils.io.log.Logger;

/**
 * 类型转换器
 * @author zkh
 */
public final class TypeConverter {
	
	//所有注册类型(根据类型去重)
	private Map<Class<?>, TypeConverterItem<?>> types = new HashMap<Class<?>, TypeConverterItem<?>>();
	
	/**
	 * 获取转换器
	 * @param cls 类class
	 * @return
	 */
	public TypeConverterItem<?> getConverter(Class<?> cls){
		//遍历集合
		for(Entry<Class<?>, TypeConverterItem<?>> kv: types.entrySet()) {
			//是否存在
			if(cls.isAssignableFrom(kv.getKey())) {
				return kv.getValue();
			}
		}
		//未找到，返回空
		return null;
	}
	
	/**
	 * 注册转换对象
	 * @param converterItem 转换对象，因转换对象为泛型，故不能使用转换对象的数组形式，每个转换对象都须单独注册。
	 */
	public <T> void registerItemConverter(TypeConverterItem<T> converterItem) {
		//类型已存在
		if(types.containsKey(converterItem.getTargetClass())) {
			Logger.warn("注册已存在的转换类型，已覆盖原先注册的转换对象");
		}
		//保存转换器
		types.put(converterItem.getTargetClass(), converterItem);
	}
}
